<?php
/***************** websyntax.blogspot.com **************************/
/*****************      Paypal IPN      * **************************/
/**********for questions email me at falconerie.04@gmail.com *******/

if ($_SERVER['REQUEST_METHOD'] != "POST") die ("No Post Variables");
// Initialize the $req variable and add CMD key value pair
$req = 'cmd=_notify-validate';
// Read the post from PayPal
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
// Now Post all of that back to PayPal's server using curl, and validate everything with PayPal
// We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments)
$url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
//$url = "https://www.paypal.com/cgi-bin/webscr";
$curl_result=$curl_err='';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER , 0);   
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);

$req = str_replace("&", "\n", $req);  // Make it a nice list in case we want to email it to ourselves for reporting

// Khai báo thư viên phpmailer
require "lib/PHPMailer/class.phpmailer.php";


// Check that the result verifies
if (strpos($curl_result, "VERIFIED") !== false) {
    $req .= "\n\nPaypal Verified OK";
} else {
	$req .= "\n\nData NOT verified from Paypal!";
        // Khai báo tạo PHPMailer
        $mail = new PHPMailer();
        //Khai báo gửi mail bằng SMTP
        $mail->IsSMTP();
        //Tắt mở kiểm tra lỗi trả về, chấp nhận các giá trị 0 1 2
        // 0 = off không thông báo bất kì gì, tốt nhất nên dùng khi đã hoàn thành.
        // 1 = Thông báo lỗi ở client
        // 2 = Thông báo lỗi cả client và lỗi ở server
        $mail->SMTPDebug  = 2;

        $mail->Debugoutput = "html"; // Lỗi trả về hiển thị với cấu trúc HTML
        $mail->Host       = "smtp.gmail.com"; //host smtp để gửi mail
        $mail->Port       = 465; // cổng để gửi mail
        $mail->SMTPSecure = "ssl"; //Phương thức mã hóa thư - ssl hoặc tls
        $mail->SMTPAuth   = true; //Xác thực SMTP
        $mail->Username   = "toankid1412@gmail.com"; // Tên đăng nhập tài khoản Gmail
        $mail->Password   = "kid@1412"; //Mật khẩu của gmail
        $mail->SetFrom("toankid1412@gmail.com", "Test Email"); // Thông tin người gửi
        $mail->AddReplyTo("toankid1412@gmail.com","Test Reply");// Ấn định email sẽ nhận khi người dùng reply lại.
        $mail->AddAddress("toankid1412@gmail.com", "Kid");//Email của người nhận
        $mail->Subject = "Tiêu đề thư"; //Tiêu đề của thư
        $mail->Body = "IPN interaction not verified";
        $mail->AltBody = "IPN interaction not verified";
        // $mail->MsgHTML(file_get_contents("email-template.html"), dirname(__FILE__));
        // Gửi thư với tập tin html

        //Tiến hành gửi email và kiểm tra lỗi
        if(!$mail->Send()) {
          echo "Có lỗi khi gửi mail: " . $mail->ErrorInfo;
        } else {
          echo "Đã gửi thư thành công!";
        }
	exit();
}

/* CHECK THESE 3 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH
1. Make sure that business email returned is your business email
2. Make sure that the transaction’s payment status is “completed”
3. Make sure there are no duplicate txn_id
4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */
 
// Check Number 1 ------------------------------------------------------------------------------------------------------------
$receiver_email = $_POST['receiver_email'];
if ($receiver_email != "toankid1412-facilitator@gmail.com") {
	$message = "Investigate why and how receiver email is wrong. Email = " . $_POST['receiver_email'] . "\n\n\n$req";
    // Khai báo tạo PHPMailer
        $mail = new PHPMailer();
        //Khai báo gửi mail bằng SMTP
        $mail->IsSMTP();
        //Tắt mở kiểm tra lỗi trả về, chấp nhận các giá trị 0 1 2
        // 0 = off không thông báo bất kì gì, tốt nhất nên dùng khi đã hoàn thành.
        // 1 = Thông báo lỗi ở client
        // 2 = Thông báo lỗi cả client và lỗi ở server
        $mail->SMTPDebug  = 2;

        $mail->Debugoutput = "html"; // Lỗi trả về hiển thị với cấu trúc HTML
        $mail->Host       = "smtp.gmail.com"; //host smtp để gửi mail
        $mail->Port       = 465; // cổng để gửi mail
        $mail->SMTPSecure = "ssl"; //Phương thức mã hóa thư - ssl hoặc tls
        $mail->SMTPAuth   = true; //Xác thực SMTP
        $mail->Username   = "toankid1412@gmail.com"; // Tên đăng nhập tài khoản Gmail
        $mail->Password   = "kid@1412"; //Mật khẩu của gmail
        $mail->SetFrom("toankid1412@gmail.com", "Test Email"); // Thông tin người gửi
        $mail->AddReplyTo("toankid1412@gmail.com","Test Reply");// Ấn định email sẽ nhận khi người dùng reply lại.
        $mail->AddAddress("toankid1412@gmail.com", "Kid");//Email của người nhận
        $mail->Subject = "Tiêu đề thư"; //Tiêu đề của thư
        $mail->Body = $message;
        $mail->AltBody = $message;
        // $mail->MsgHTML(file_get_contents("email-template.html"), dirname(__FILE__));
        // Gửi thư với tập tin html

        //Tiến hành gửi email và kiểm tra lỗi
        if(!$mail->Send()) {
          echo "Có lỗi khi gửi mail: " . $mail->ErrorInfo;
        } else {
          echo "Đã gửi thư thành công!";
        }
    exit(); // exit script
}
// Check number 2 ------------------------------------------------------------------------------------------------------------
if ($_POST['payment_status'] != "Completed") {
	// Handle how you think you should if a payment is not complete yet, a few scenarios can cause a transaction to be incomplete
}
// Connect to database ------------------------------------------------------------------------------------------------------

// Database variables
$host = "http://14.160.70.238"; //database location
$user = "mikit"; //database username
$pass = "grvhn"; //database password
$db_name = "toan_paypal"; //database name

//Database Connection
$link = mysql_connect($host, $user, $pass);
        if ( !$link ) {
            die("không nết nối được vào MySQL server");
         } //end if
mysql_select_db($db_name);

// Check number 3 ------------------------------------------------------------------------------------------------------------
$this_txn = $_POST['txn_id'];
$sql = mysql_query("SELECT id FROM transactions WHERE txn_id='$this_txn' LIMIT 1");
$numRows = mysql_num_rows($sql);
if ($numRows > 0) {
    $message = "Duplicate transaction ID occured so we killed the IPN script. \n\n\n$req";
    // Khai báo tạo PHPMailer
        $mail = new PHPMailer();
        //Khai báo gửi mail bằng SMTP
        $mail->IsSMTP();
        //Tắt mở kiểm tra lỗi trả về, chấp nhận các giá trị 0 1 2
        // 0 = off không thông báo bất kì gì, tốt nhất nên dùng khi đã hoàn thành.
        // 1 = Thông báo lỗi ở client
        // 2 = Thông báo lỗi cả client và lỗi ở server
        $mail->SMTPDebug  = 2;

        $mail->Debugoutput = "html"; // Lỗi trả về hiển thị với cấu trúc HTML
        $mail->Host       = "smtp.gmail.com"; //host smtp để gửi mail
        $mail->Port       = 465; // cổng để gửi mail
        $mail->SMTPSecure = "ssl"; //Phương thức mã hóa thư - ssl hoặc tls
        $mail->SMTPAuth   = true; //Xác thực SMTP
        $mail->Username   = "toankid1412@gmail.com"; // Tên đăng nhập tài khoản Gmail
        $mail->Password   = "kid@1412"; //Mật khẩu của gmail
        $mail->SetFrom("toankid1412@gmail.com", "Test Email"); // Thông tin người gửi
        $mail->AddReplyTo("toankid1412@gmail.com","Test Reply");// Ấn định email sẽ nhận khi người dùng reply lại.
        $mail->AddAddress("toankid1412@gmail.com", "Kid");//Email của người nhận
        $mail->Subject = "Tiêu đề thư"; //Tiêu đề của thư
        
        $mail->Body = $message;
        $mail->AltBody = $message;
        // $mail->MsgHTML(file_get_contents("email-template.html"), dirname(__FILE__));
        // Gửi thư với tập tin html

        //Tiến hành gửi email và kiểm tra lỗi
        if(!$mail->Send()) {
          echo "Có lỗi khi gửi mail: " . $mail->ErrorInfo;
        } else {
          echo "Đã gửi thư thành công!";
        }
    exit(); // exit script
} 
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////websyntax.blogspot.com////////////////////////////////////////////////////////////
// Homework - Examples of assigning local variables from the POST variables
$txn_id = $_POST['txn_id'];
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
// Place the transaction into the database
$sql = mysql_query("INSERT INTO transactions (product_id_array, payer_email, first_name, last_name, payment_date, mc_gross, payment_currency, txn_id, receiver_email, payment_type, payment_status, txn_type, payer_status, address_street, address_city, address_state, address_zip, address_country, address_status, notify_version, verify_sign, payer_id, mc_currency, mc_fee) 
   VALUES('$custom','$payer_email','$first_name','$last_name','$payment_date','$mc_gross','$payment_currency','$txn_id','$receiver_email','$payment_type','$payment_status','$txn_type','$payer_status','$address_street','$address_city','$address_state','$address_zip','$address_country','$address_status','$notify_version','$verify_sign','$payer_id','$mc_currency','$mc_fee')") or die ("unable to execute the query");

mysql_close();
// Mail yourself the details
// Khai báo tạo PHPMailer
        $mail = new PHPMailer();
        //Khai báo gửi mail bằng SMTP
        $mail->IsSMTP();
        //Tắt mở kiểm tra lỗi trả về, chấp nhận các giá trị 0 1 2
        // 0 = off không thông báo bất kì gì, tốt nhất nên dùng khi đã hoàn thành.
        // 1 = Thông báo lỗi ở client
        // 2 = Thông báo lỗi cả client và lỗi ở server
        $mail->SMTPDebug  = 2;

        $mail->Debugoutput = "html"; // Lỗi trả về hiển thị với cấu trúc HTML
        $mail->Host       = "smtp.gmail.com"; //host smtp để gửi mail
        $mail->Port       = 465; // cổng để gửi mail
        $mail->SMTPSecure = "ssl"; //Phương thức mã hóa thư - ssl hoặc tls
        $mail->SMTPAuth   = true; //Xác thực SMTP
        $mail->Username   = "toankid1412@gmail.com"; // Tên đăng nhập tài khoản Gmail
        $mail->Password   = "kid@1412"; //Mật khẩu của gmail
        $mail->SetFrom("toankid1412@gmail.com", "Test Email"); // Thông tin người gửi
        $mail->AddReplyTo("toankid1412@gmail.com","Test Reply");// Ấn định email sẽ nhận khi người dùng reply lại.
        $mail->AddAddress("toankid1412@gmail.com", "Kid");//Email của người nhận
        $mail->Subject = "Tiêu đề thư"; //Tiêu đề của thư
        $mail->Body = "NORMAL IPN RESULT YAY MONEY!";
        // $mail->MsgHTML(file_get_contents("email-template.html"), dirname(__FILE__));
        // Gửi thư với tập tin html

        //Tiến hành gửi email và kiểm tra lỗi
        if(!$mail->Send()) {
          echo "Có lỗi khi gửi mail: " . $mail->ErrorInfo;
        } else {
          echo "Đã gửi thư thành công!";
        }
?>